package com.zenithmind.user.service.domain;

import com.zenithmind.user.pojo.domain.User;
import com.zenithmind.user.pojo.query.UserQuery;
import com.zenithmind.user.pojo.vo.UserVO;
import com.zenithmind.common.result.PageResult;

import java.util.List;

/**
 * 用户查询服务接口
 * 遵循接口隔离原则：只包含查询相关功能
 * 遵循单一职责原则：专注于用户查询逻辑
 */
public interface UserQueryService {
    
    /**
     * 根据ID获取用户
     */
    User getUserById(String id);
    
    /**
     * 根据用户名获取用户
     */
    User getUserByUsername(String username);
    
    /**
     * 根据邮箱获取用户
     */
    User getUserByEmail(String email);
    
    /**
     * 根据ID获取用户VO
     */
    UserVO getUserVOById(String id);
    
    /**
     * 获取当前登录用户
     */
    UserVO getCurrentUser();
    
    /**
     * 分页查询用户
     */
    PageResult<UserVO> getUserPage(UserQuery userQuery);
    
    /**
     * 批量获取用户
     */
    List<User> getUsersByIds(List<String> ids);
    
    /**
     * 检查用户名是否存在
     */
    boolean existsByUsername(String username);
    
    /**
     * 检查邮箱是否存在
     */
    boolean existsByEmail(String email);
    
    /**
     * 统计用户数量
     */
    long countUsers();
    
    /**
     * 统计活跃用户数量
     */
    long countActiveUsers();
}
